`:top
`!SQL`! (sigle pour `*Structured Query Language`*, « langage de requêtes structurées ») est un `F33f`_`[langage informatique`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Langage_informatique]`_`f normalisé servant à exploiter des `F33f`_`[bases de données relationnelles`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Base_de_données_relationnelle]`_`f. La partie `*langage de manipulation des données`* de SQL permet de rechercher, d'ajouter, de modifier ou de supprimer des données dans les bases de données relationnelles.
Outre le langage de manipulation des données :
• le `*langage de définition des données`* permet de créer et de modifier l'organisation des données dans la base de données,
• le `*langage de contrôle de transaction`* permet de commencer et de terminer des `F33f`_`[transactions`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Transaction_informatique]`_`f,
• le `*langage de contrôle des données`* permet d'autoriser ou d'interdire l'accès à certaines données (`F33f`_`[base`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Base_de_données]`_`f, `F33f`_`[table`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Table_(base_de_données)]`_`f, `F33f`_`[enregistrement`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Enregistrement_(base_de_données)]`_`f) à certaines personnes.
Créé en 1974, normalisé depuis 1986, le langage est reconnu par la grande majorité des `F33f`_`[systèmes de gestion de bases de données relationnelles`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Système_de_gestion_de_base_de_données]`_`f (SGBDR) du marché.
SQL fait partie de la même famille que les langages ALPHA (dont il est le descendant), SQUARE, QUEL (intégré à `F33f`_`[Ingres`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Ingres_(base_de_données)]`_`f) ou QBE (Zloof). Il a été appelé SEQUEL à sa naissance, mais ce nom a été changé en SQL parce que SEQUEL était une marque déposée de l'`F33f`_`[avionneur`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Construction_aéronautique]`_`f `F33f`_`[Hawker-Siddeley`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Hawker_Siddeley]`_`f.
>>Contents
• `F0af`_`[Historique`#historique]`_`f
• `F0af`_`[Utilisation`#utilisation]`_`f
• `F0af`_`[Syntaxe générale`#syntaxe-g-n-rale]`_`f
• `F0af`_`[Langage de manipulation de données`#langage-de-manipulation-de-donn-es]`_`f
• `F0af`_`[Langage de définition de données`#langage-de-d-finition-de-donn-es]`_`f
• `F0af`_`[Langage de contrôle de données et langage de contrôle des transactions`#langage-de-contr-le-de-donn-es-et-langage-de-contr-le-des-transactions]`_`f
• `F0af`_`[Exemples de code`#exemples-de-code]`_`f
• `F0af`_`[Manipulation de données`#manipulation-de-donn-es]`_`f
• `F0af`_`[NULL et la logique ternaire`#null-et-la-logique-ternaire]`_`f
• `F0af`_`[Langages apparentés`#langages-apparent-s]`_`f
• `F0af`_`[Dialectes inspirés par SQL`#dialectes-inspir-s-par-sql]`_`f
• `F0af`_`[Langages concurrents`#langages-concurrents]`_`f
• `F0af`_`[Alternatives`#alternatives]`_`f
• `F0af`_`[Systèmes de gestion de base de données avec SQL`#syst-mes-de-gestion-de-base-de-donn-es-avec-sql]`_`f
• `F0af`_`[Enseignement`#enseignement]`_`f
• `F0af`_`[Notes et références`#notes-et-r-f-rences]`_`f
• `F0af`_`[Voir aussi`#voir-aussi]`_`f
• `F0af`_`[Bibliographie`#bibliographie]`_`f
• `F0af`_`[En français`#en-fran-ais]`_`f
• `F0af`_`[En anglais`#en-anglais]`_`f
• `F0af`_`[Articles connexes`#articles-connexes]`_`f
-─
>>Historique
En juin 1970, `F33f`_`[Edgar Frank Codd`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Edgar_Frank_Codd]`_`f publia l'article `*A Relational Model of Data for Large Shared Data Banks`* (« Un référentiel de données relationnel pour de grandes banques de données partagées ») dans la revue `*Communications of the ACM`* (`*`F33f`_`[Association for Computing Machinery`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Association_for_Computing_Machinery]`_`f`*). Ce référentiel `F33f`_`[relationnel`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Modèle_relationnel]`_`f fondé sur la `F33f`_`[logique des prédicats du premier ordre`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Calcul_des_prédicats]`_`f a été rapidement reconnu comme un modèle théorique intéressant, pour l'interrogation des `F33f`_`[bases de données`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Base_de_données]`_`f, et a inspiré le développement du langage `*Structured English QUEry Language`* (`*SEQUEL`*) (« langage d'interrogation structuré en anglais »), renommé ultérieurement SQL pour cause de conflit de `F33f`_`[marque déposée`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Droit_des_marques]`_`f.
Développée chez `F33f`_`[IBM`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=IBM]`_`f en 1970 par `F33f`_`[Donald Chamberlin`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Donald_D._Chamberlin]`_`f et `F33f`_`[Raymond Boyce`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Raymond_F._Boyce]`_`f, cette première version a été conçue pour manipuler et éditer des données stockées dans la base de données relationnelle à l'aide du `F33f`_`[système de gestion de base de données`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Système_de_gestion_de_base_de_données]`_`f `F33f`_`[IBM System R`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=IBM_System_R]`_`f. Le nom SEQUEL, qui était déposé commercialement par l'`F33f`_`[avionneur`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Construction_aéronautique]`_`f `F33f`_`[Hawker Siddeley`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Hawker_Siddeley]`_`f pour un système d'`F33f`_`[acquisition de données`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Chaîne_d'acquisition]`_`f, a été abandonné et contracté en SQL en 1975`:cite-ref-2[`F5bf`_`[2`#cite-note-2]`_`f]. SQL était censé alors devenir un élément clé du futur `F33f`_`[projet FS`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Projet_Future_Systems]`_`f.
En 1979, `*Relational Software, Inc.`* (actuellement `*`F33f`_`[Oracle Corporation`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Oracle_(entreprise)]`_`f`*) présenta la première version commercialement disponible de SQL, rapidement imité par d'autres fournisseurs.
SQL a été adopté comme recommandation par l'`F33f`_`[Institut de normalisation américaine`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=American_National_Standards_Institute]`_`f (ANSI) en 1986, puis comme norme internationale par l'`F33f`_`[ISO`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Organisation_internationale_de_normalisation]`_`f en 1987 sous le nom de `*ISO/CEI 9075 - Technologies de l'information - Langages de base de données - SQL`*`:cite-ref-3[`F5bf`_`[3`#cite-note-3]`_`f].
La `F33f`_`[norme`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Norme_et_standard_techniques]`_`f internationale SQL est passée par un certain nombre de révisions :
`t
| Année | Nom | Appellation | Commentaires |
|---|---|---|---|
| 1986 | ISO/CEI 9075:1986 | SQL-86 ou SQL-87 | Édité par l' ANSI puis adopté par l'ISO en 1987. |
| 1989 | ISO/CEI 9075:1989 | SQL-89 ou SQL-1 | Révision mineure. |
| 1992 | ISO/CEI 9075:1992 | SQL-92 (en) alias SQL2 | Révision majeure. |
| 1999 | ISO/CEI 9075:1999 | SQL-99 alias SQL3 | Expressions rationnelles , requêtes récursives , déclencheurs, types non-scalaires et quelques fonctions orientées objet (les deux derniers points sont quelque peu controversés et pas encore largement implémentés). |
| 2003 | ISO/CEI 9075:2003 | SQL:2003 (en) | Introduction de fonctions pour la manipulation XML , « window functions », ordres standardisés et colonnes avec valeurs auto-produites (y compris colonnes d'identité). |
| 2008 | ISO/CEI 9075:2008 | SQL:2008 | Ajout de quelques fonctions de fenêtrage (ntile, lead, lag, first value, last value, nth value), limitation du nombre de lignes (OFFSET / FETCH), amélioration mineure sur les types distincts, curseurs et mécanismes d'auto-incrémentation. |
| 2011 | ISO/CEI 9075:2011 | SQL:2011 | Ajout du support des tables temporelles (historisation automatique). |
| 2016 | ISO/IEC 9075:2016 | SQL:2016 | Ajout de la recherche de motifs de lignes, de fonctions de table polymorphes , d'opérations sur des données JSON stockées dans des champs de type chaîne de caractères. |
| 2019 | ISO/IEC 9075-15:2019 | SQL:2019 | Ajout de la partie 15, tableaux multidimensionnels (type MDarray et opérateurs) |
| 2023 | ISO/IEC 9075:2023 | SQL:2023 | Ajoute le type de données JSON (SQL/Fondation) ; Ajoute la Partie 16, Requêtes sur les graphes de propriétés (SQL/PGQ) |
`t
Comme toute norme internationale publiée par l'ISO, ISO/CEI 9075 est disponible à l'achat sur le site de cette organisation`:cite-ref-4[`F5bf`_`[4`#cite-note-4]`_`f]. Le dernier brouillon de la norme est disponible sur wiscorp.com`:cite-ref-5[`F5bf`_`[5`#cite-note-5]`_`f].
>>Utilisation
Le langage SQL s'utilise principalement de trois manières :
• un programme écrit dans un `F33f`_`[langage de programmation`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Langage_de_programmation]`_`f donné utilise l'`F33f`_`[interface de programmation`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Call_Level_Interface]`_`f du `F33f`_`[SGBD`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Système_de_gestion_de_base_de_données]`_`f pour lui transmettre des instructions en langage SQL. Ces programmes utilisent des composants logiciels tels que `F33f`_`[ODBC`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Open_Database_Connectivity]`_`f ou `F33f`_`[JDBC`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Java_Database_Connectivity]`_`f. Cette technique est utilisée par l'`F33f`_`[invite de commande`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Interface_en_ligne_de_commande]`_`f qui permet à un `F33f`_`[administrateur`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Administrateur_de_base_de_données]`_`f d'effectuer des opérations sur les bases de données, opérations qu'il décrit en SQL ;
• technique dite `*embedded SQL`* : des instructions en langage SQL sont incorporées dans le `F33f`_`[code source`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Code_source]`_`f d'un programme écrit dans un autre langage ;
• technique des `F33f`_`[procédures stockées`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Procédure_stockée]`_`f : des `F33f`_`[fonctions`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Routine_(informatique)]`_`f écrites dans un langage procédural propre à chaque SGBD (`F33f`_`[PL/SQL`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=PL/SQL]`_`f pour `F33f`_`[Oracle`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Oracle_Database]`_`f, SQL/PSM pour `F33f`_`[MySQL`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=MySQL]`_`f ...) sont enregistrées dans la base de données en vue d'être exécutées par le SGBD. Cette technique est aussi utilisée pour les `F33f`_`[triggers`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Déclencheur]`_`f - procédures déclenchées automatiquement sur modification du contenu de la base de données.
>>Syntaxe générale
Les instructions SQL s'écrivent d'une manière qui ressemble à celle de phrases ordinaires en anglais. Cette ressemblance voulue vise à faciliter l'apprentissage et la lecture`:cite-ref-6[`F5bf`_`[6`#cite-note-6]`_`f].
C'est un `F33f`_`[langage déclaratif`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Programmation_déclarative]`_`f c'est-à-dire qu'il permet de décrire le résultat escompté, sans décrire la manière de l'obtenir. Les SGBD sont équipés d'`F33f`_`[optimiseurs de requêtes`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Optimisation_de_requête]`_`f - des mécanismes qui déterminent automatiquement la manière `F33f`_`[optimale`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Optimisation_de_code]`_`f d'effectuer les opérations, notamment par une estimation de la `F33f`_`[complexité algorithmique`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Théorie_de_la_complexité_(informatique_théorique)]`_`f. Celle-ci est fondée sur des `F33f`_`[statistiques`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Statistique]`_`f récoltées à partir des données contenues dans la base de données (nombre d'`F33f`_`[enregistrements`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Enregistrement_(base_de_données)]`_`f, nombre de valeurs distinctes dans une colonne, etc.).
Les instructions SQL couvrent quatre domaines :
• `F33f`_`[Langage de définition de données`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Langage_de_définition_de_données]`_`f ;
• `F33f`_`[Langage de manipulation de données`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Langage_de_manipulation_de_données]`_`f ;
• `F33f`_`[Langage de contrôle de données`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Langage_de_contrôle_de_données]`_`f ;
• `F33f`_`[Langage de contrôle des transactions`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Langage_de_contrôle_des_transactions]`_`f.
>>>Langage de manipulation de données
Les instructions de manipulation du contenu de la base de données commencent par les mots clés `*`F33f`_`[SELECT`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Select_(SQL)]`_`f`*, `*`F33f`_`[UPDATE`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Update_(SQL)]`_`f`*, `*`F33f`_`[INSERT`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Insert_(SQL)]`_`f`* ou `*`F33f`_`[DELETE`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Delete_(SQL)]`_`f`* qui correspondent respectivement aux opérations de recherche de contenu, modification, ajout et suppression.
Divers autres `F33f`_`[mots-clés`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Mot_clé]`_`f tels que `*FROM`*, `*JOIN`* et `*GROUP BY`* permettent d'indiquer les opérations d'`F33f`_`[algèbre relationnelle`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Algèbre_relationnelle]`_`f à effectuer en vue d'obtenir le contenu à manipuler.
>>>Langage de définition de données
Les instructions de manipulation des `F33f`_`[métadonnées`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Métadonnée]`_`f - description de la structure, l'organisation et les caractéristiques de la base de données - commencent avec les mots-clés `*CREATE`*, `*ALTER`*, `*DROP`*, `*RENAME`*, `*COMMENT`* ou `*TRUNCATE.`*
Celles-ci correspondent aux opérations d'ajouter, modifier, supprimer, renommer, commenter ou vider une métadonnée.
Ces mots clés sont immédiatement suivis du type de métadonnée à manipuler - `*TABLE`*, `*VIEW`*, `*INDEX`*...
>>>Langage de contrôle de données et langage de contrôle des transactions
Les mots clés `*GRANT`* et `*REVOKE`* permettent d'autoriser des opérations à certaines personnes, d'ajouter ou de supprimer des autorisations. Tandis que les mots clés `*COMMIT`* et `*ROLLBACK`* permettent de confirmer ou annuler l'exécution de `F33f`_`[transactions`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Transaction_informatique]`_`f.
La syntaxe de SQL fait l'objet de la `F33f`_`[norme`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Norme_et_standard_techniques]`_`f `*ISO 9075`*. Cette norme laisse la possibilité aux producteurs de `F33f`_`[SGBD`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Système_de_gestion_de_base_de_données]`_`f d'y ajouter des instructions spécifiques et non normalisées.
La norme a évolué au cours des années en vue de s'adapter aux demandes. Ainsi, les `F33f`_`[éditeurs`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Éditeur_de_logiciel]`_`f de SGBD ont souvent ajouté des possibilités à leurs produits, avant que celles-ci fassent objet de normes`:cite-ref-7[`F5bf`_`[7`#cite-note-7]`_`f]. Cela provoque des variations dans la compréhension et l'interprétation qui est faite d'un `F33f`_`[code source`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Code_source]`_`f en SQL par les différents logiciels de SGBD`:cite-ref-8[`F5bf`_`[8`#cite-note-8]`_`f].
Ces différences font qu'un `F33f`_`[code source`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Code_source]`_`f écrit sans précautions pour un SGBD donné ne fonctionnera pas forcément avec un autre SGBD.
>>>Exemples de code
• Choix de la base
SQL peut gérer, et gère en général, `*plusieurs`* bases de données. Il faut indiquer au départ avec laquelle on veut travailler par une instruction USE
`B100`F9d9USE mabase;`f`b
• Recherche
`B100`F9d9SELECT nom, service`f`b
`B100`F9d9FROM employe`f`b
`B100`F9d9WHERE statut = 'stagiaire'`f`b
`B100`F9d9ORDER BY nom;`f`b
• procédure stockée
`B100`F9d9 DECLARE N INTEGER;`f`b
`B100`F9d9 SET N = 1;`f`b
`B100`F9d9 FOR C`f`b
`B100`F9d9 AS C_USR_MISE_A_JOUR`f`b
`B100`F9d9 CURSOR FOR`f`b
`B100`F9d9 SELECT USR_ID, USR_NOM`f`b
`B100`F9d9 FROM T_UTILISATEUR_USR`f`b
`B100`F9d9 ORDER BY USR_ID`f`b
`B100`F9d9 FOR UPDATE OF USR_NOM`f`b
`B100`F9d9 DO`f`b
`B100`F9d9 IF MOD(N, 2) = 0`f`b
`B100`F9d9 THEN`f`b
`B100`F9d9 UPDATE T_UTILISATEUR_USR`f`b
`B100`F9d9...`f`b
• Supprimer totalement une base de données et tout ce qu'elle contient :
`B100`F9d9DROP DATABASE nom_base_de_donnees;`f`b
>>Manipulation de données
Le `F33f`_`[Langage de manipulation de données`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Langage_de_manipulation_de_données]`_`f LMD (`*Data Manipulation Language`*, DML, en anglais) est un sous-ensemble du SQL utilisé pour ajouter, modifier et supprimer des données :
• `B100`F9d9`F33f`_`[INSERT`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Insert_(SQL)]`_`f`f`b insère des `F33f`_`[n-uplets`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Uplet]`_`f (informellement appelés lignes et appelés `*`F33f`_`[tuples`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Uplet]`_`f`* en anglais) dans une table existante. Par exemple :
`B100`F9d9INSERT INTO a_table (field1, field2, field3)`f`b
`B100`F9d9 VALUES ('test', 'N', NULL);`f`b
• `B100`F9d9`F33f`_`[UPDATE`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Update_(SQL)]`_`f`f`b Modifie un ensemble de n-uplets existant dans une table. Par exemple :
`B100`F9d9UPDATE a_table`f`b
`B100`F9d9 SET field1 = 'updated value'`f`b
`B100`F9d9WHERE field2 = 'N';`f`b
• `B100`F9d9`F33f`_`[DELETE`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Delete_(SQL)]`_`f`f`b Supprime un ensemble de n-uplets existant dans une table. Par exemple :
`B100`F9d9DELETE FROM a_table`f`b
`B100`F9d9 WHERE field2 = 'N';`f`b
• `B100`F9d9`F33f`_`[MERGE`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Merge_(SQL)]`_`f`f`b Combine les données de plusieurs tables. C'est la combinaison de `B100`F9d9`F33f`_`[INSERT`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Insert_(SQL)]`_`f`f`b et `B100`F9d9UPDATE`f`b. Il peut être nommé `B100`F9d9UPSERT`f`b, `B100`F9d9INSERT OR REPLACE INTO`f`b, ou encore `B100`F9d9INSERT ON DUPLICATE KEY UPDATE`f`b dans certains moteurs de base de données.
`B100`F9d9 MERGE INTO table_name USING table_reference ON (condition)`f`b
`B100`F9d9 WHEN MATCHED THEN`f`b
`B100`F9d9 UPDATE SET column1 = value1 [, column2 = value2 ...]`f`b
`B100`F9d9 WHEN NOT MATCHED THEN`f`b
`B100`F9d9 INSERT (column1 [, column2 ...]) VALUES (value1 [, value2 ...`f`b
>>NULL et la logique ternaire
Le mot-clef `!NULL`! fut introduit dans SQL pour exprimer les informations manquantes dans le modèle relationnel. L'introduction de NULL, avec TRUE et FALSE est le fondement de la `F33f`_`[logique ternaire`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Logique_ternaire]`_`f. NULL n'a pas de valeur en SQL (et n'est membre d'aucun type de données), c'est un mot-clé réservé, indiquant qu'une information est manquante. Par conséquent, la comparaison avec NULL, même avec NULL lui-même, ne peut ni être VRAI ni être FAUX, elle est obligatoirement inconnue et ne possède aucune valeur booléenne. En effet, NULL ne peut pas être considéré égal à NULL, puisque les deux informations manquantes, que ces deux NULL distincts représentent, peuvent s'avérer différentes. On dit généralement que NULL est un « marqueur ».
>>Langages apparentés
• Créé par extension de SQL, `F33f`_`[Transact-SQL`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Transact-SQL]`_`f est un `F33f`_`[langage de programmation`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Langage_de_programmation]`_`f des SGBD SQL Adaptive Server Anywhere (ASA), SQL Adaptive Server Enterprise (ASE), `F33f`_`[Sybase IQ`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Sybase_IQ]`_`f de `F33f`_`[Sybase`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Sybase]`_`f ainsi que `F33f`_`[SQL Server`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Microsoft_SQL_Server]`_`f de `F33f`_`[Microsoft`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Microsoft]`_`f.
• `F33f`_`[PL/SQL`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=PL/SQL]`_`f est un `F33f`_`[langage de programmation`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Langage_de_programmation]`_`f du SGBD `F33f`_`[Oracle Database`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Oracle_Database]`_`f de `F33f`_`[Oracle Corporation`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Oracle_(entreprise)]`_`f. `F33f`_`[PL/pgSQL`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=PL/pgSQL]`_`f est un langage de programmation du SGBD `F33f`_`[PostgreSQL`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=PostgreSQL]`_`f. Ce sont des langages de `F33f`_`[programmation procédurale`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Programmation_procédurale]`_`f dans lesquels peuvent être ajoutées des instructions en langage SQL. Le `F33f`_`[code source`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Code_source]`_`f écrit dans ce type de langage est `F33f`_`[compilé`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Compilateur]`_`f par le SGBD, puis enregistré dans la base de données et exécuté au besoin.
• `F33f`_`[OQL`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Object_Query_Language]`_`f est un langage similaire à SQL, pour demander des opérations aux `F33f`_`[bases de données orientées objet`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Base_de_données_orientée_objet]`_`f et obtenir les résultats sous forme d'`F33f`_`[objets`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Objet_(informatique)]`_`f. Le langage est normalisé par le `F33f`_`[Object Data Management Group`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Object_Data_Management_Group]`_`f - un `F33f`_`[consortium`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Consortium]`_`f d'industriels informatiques qui a cessé toute activité en 2001.
>>Dialectes inspirés par SQL
De nombreux dialectes ont été créés en s'inspirant de SQL. Par exemple :
• par `F33f`_`[Salesforce`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Salesforce]`_`f, le SOQL reprenant une partie de la syntaxe SQL mais gérant les jointures différemment (à partir des tables de relation) ;
• par `F33f`_`[Apache Hive`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Apache_Hive]`_`f, le HiveQL ou HQL qui reprend le SQL et vise à s'en rapprocher le plus possible ;
• `F33f`_`[Snowflake`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Snowflake_Inc.]`_`f (DataWareHouse Cloud ou DataLake Cloud) présente le Snowflake SQL, qui est un sous-ensemble de SQL-99.
>>Langages concurrents
Parmi les autres langages de requêtes, citons les ancêtres de SQL comme QUEL (Query English Language) ou encore le langage QBE (Query By Example). Cependant le langage `F33f`_`[QBE`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Query_by_Example]`_`f, très différent de SQL, est encore en vigueur dans les SGBDR de type « fichier » que sont `F33f`_`[Paradox`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Paradox_(base_de_données)]`_`f (Ansa Software/Borland/Corel) ou `F33f`_`[Microsoft Access`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Microsoft_Access]`_`f (base de données) de `F33f`_`[Microsoft`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Microsoft]`_`f.
>>Alternatives
• Le langage `F33f`_`[Tutorial D`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Tutorial_D]`_`f est présenté comme étant plus cohérent et plus simple d'emploi par ses inventeurs. Il permet, de surcroît, pour alléger le libellé des requêtes, l'emploi d'une clause `!WITH`! inspirée du langage `F33f`_`[Pascal`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Pascal_(langage)]`_`f, bien que `!WITH`! ne contribue pas à faciliter la lecture du code.
À noter que la technique du WITH a été en partie reprise dans la norme SQL:1999 pour réaliser des « `*Common Table Expression`* » (CTE ou `*Table d'Expression Partagées`* en français), c'est-à-dire des vues non instanciées utilisables par la requête dans laquelle elles figurent, et ce afin de factoriser des expressions ou encore de permettre l'écriture de requêtes récursives de manière à résoudre élégamment des parcours d'arbres ou de graphes.
Parmi les autres candidats, on compte :
• BS12`:cite-ref-9[`F5bf`_`[9`#cite-note-9]`_`f], qui lui aussi s'est attaqué à ce problème de l'enchâssement et de la perte de `F33f`_`[lisibilité`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Lisibilité_(programmation)]`_`f qu'il entraîne.
>>Systèmes de gestion de base de données avec SQL
Tous ces systèmes présentent certaines particularités. Il est d'ailleurs toujours intéressant de se référer au manuel de référence du SGBDR, lors de requêtes particulières ou complexes, ainsi que pour leur optimisation.
>>Enseignement
L'apprentissage des requêtes de base en SQL fait partie du `F33f`_`[programme`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Programmes_scolaires]`_`f d'`F33f`_`[informatique`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Informatique]`_`f tronc commun des `F33f`_`[classes préparatoires scientifiques`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Classes_préparatoires_scientifiques]`_`f `F33f`_`[MP`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Classe_préparatoire_mathématiques_et_physique]`_`f, `F33f`_`[PC`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Classe_préparatoire_physique_et_chimie]`_`f, `F33f`_`[PSI`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Classe_préparatoire_physique_et_sciences_de_l'ingénieur]`_`f et `F33f`_`[PT`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Classe_préparatoire_physique_et_technologie]`_`f`:cite-ref-10[`F5bf`_`[10`#cite-note-10]`_`f].
>>Notes et références
`:cite-note-wikidata-9e50af997802e5ad5fddb4b39a019e425d92b882-1`!1.`! « SQL:2023 is out », 1er juin 2023 (consulté le 26 juin 2023)
`:cite-note-2`!2.`! `F0af`_`[↑`#cite-ref-2]`_`f (en) Interview de Donald Chamberlain.
`:cite-note-3`!3.`! `F0af`_`[↑`#cite-ref-3]`_`f `:14-00-17-00`a14:00-17:00, « ISO/IEC 9075-1:2011 », sur ISO (consulté le 8 janvier 2021)
`:cite-note-4`!4.`! `F0af`_`[↑`#cite-ref-4]`_`f (en) « International Organization for Standardization », sur ISO (consulté le 11 septembre 2020).
`:cite-note-5`!5.`! `F0af`_`[↑`#cite-ref-5]`_`f http://www.wiscorp.com/sql_2003_standard.zip
`:cite-note-6`!6.`! `F0af`_`[↑`#cite-ref-6]`_`f `:sumathiesakkirajan2007`a`:s-sumathis-esakkirajan2007`a(en) S. Sumathi et S. Esakkirajan, Fundamentals of Relational Database Management Systems, Berlin, Heidelberg, Springer-Verlag, coll. « Studies in computational intelligence » (no 47), 2007 (`F33f`_`[ISBN`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=International_Standard_Book_Number]`_`f 978-3-540-48399-1, `F33f`_`[OCLC`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Online_Computer_Library_Center]`_`f 300238984, lire en ligne).
`:cite-note-7`!7.`! `F0af`_`[↑`#cite-ref-7]`_`f Kevin E. Kline - Daniel Kline et Brand Hunt, `*SQL in a Nutshell`*, O'Reilly Media, Inc. - 2004 (`F33f`_`[ISBN`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=International_Standard_Book_Number]`_`f 978-0-596-00481-1).
`:cite-note-8`!8.`! `F0af`_`[↑`#cite-ref-8]`_`f (en) « Comparison of the different SQL implementations ».
`:cite-note-9`!9.`! `F0af`_`[↑`#cite-ref-9]`_`f BS12.
`:cite-note-10`!10.`! `F0af`_`[↑`#cite-ref-10]`_`f `:2021`a« Bulletin officiel : programme d'informatique commune » [PDF], sur Ministère de l'enseignement supérieur, de la recherche et de l'innovation, 11 février 2021 (consulté le 17 avril 2025), p. 9-10
>>Voir aussi
>>Bibliographie
>>>En français
• `*SQL`* Synthèse de cours et exercices - 4e édition (2 chapitres supplémentaires sur l'indexation et l'administration) - Frédéric Brouard, Christian Soutou, Rudi Bruchez - Pearson Education, 2012
• `*Bases de données - de la modélisation au SQL`* - Laurent Audibert - `F33f`_`[Ellipses`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Éditions_Ellipses]`_`f, 2009
• `*SQL`* Synthèse de cours et exercices - 2e édition - Frédéric Brouard, Christian Soutou, Rudi Bruchez - Pearson Education, 2008
• `*SQL par l'exemple`* - Antony Molinaro - O'Reilly, 2007
• `*SQL en concentré`* - Kevin Kline - O'Reilly, 2005
• `*SQL pour les nuls`* - Allen G. Taylor - First Interactive, 2001
• `*SQL`* développement - Frédéric Brouard - Campus Press, 2001
• `*SQL2 - SQL3, Applications à Oracle`* (3e édition) - Pierre Delmal - De Boeck Université, 2001
• `*SQL avancé`* (2e édition) - Joe Celko - Vuibert, 2000
>>>En anglais
• `*The Art of SQL`* - Stéphane Faroult - `F33f`_`[O'Reilly`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=O'Reilly_Media]`_`f, 2006
• `*Advanced SQL:1999`* - Jim Melton - Morgan Kaufmann, 2003
• `*SQL bible`* - A. Kriegel, B. M. Trukhnov - John Wiley, 2003
• `*SQL:1999, Understanding Relational Language Components`* - Jim Melton, Alan R. Simon - Morgan Kauffman, 2002
• `*SQL in a nutshell`* - Kevin Kline, Daniel Kline - O'Reilly, 2001
• `*SQL 3, Implementing the SQL Foundation Standard`* - Paul Fortier - `F33f`_`[McGraw-Hill`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=McGraw-Hill_Education]`_`f, 1999
• `*SQL-99 complete really`* - Peter Gulutzan, Trudy Pelzer - R&D Books, 1999
• `*The Complete Reference SQL`* - J. R. Groff, P. N. Weinberg - Osborne, 1999
• `*A guide to the SQL standard`* - Chris J. Date, Hugh Darwen - `F33f`_`[Addison Wesley`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Addison-Wesley]`_`f - USA, 1997
• `*Understanding the new SQL`* - Jim Melton, Alan R. Simon - Morgan Kaufmann, 1993
>>>Articles connexes
• `F33f`_`[NoSQL`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=NoSQL]`_`f
• `F33f`_`[Base de données relationnelle`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Base_de_données_relationnelle]`_`f
• `F33f`_`[Formes normales`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Forme_normale_(bases_de_données_relationnelles)]`_`f
• `F33f`_`[Pro*C`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Pro*C]`_`f
• `F33f`_`[Système de gestion de base de données`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Système_de_gestion_de_base_de_données]`_`f
• `F33f`_`[Pick (système d'exploitation)`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Pick_(système_d'exploitation)]`_`f
• `F33f`_`[Query by Example`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Query_by_Example]`_`f
• `F33f`_`[SAS (langage)`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=SAS_(langage)]`_`f
• `F33f`_`[W3Schools`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=W3Schools]`_`f : site d'apprentissage de divers `F33f`_`[langages de programmation`:/page/wikibook/entry.mu`zim=wikipedia_fr_all_nopic_2025-10.zim|entry_path=Langage_de_programmation]`_`f dont SQL
• Portail de la programmation informatique
• Portail des bases de données
`c`F0af`_`[↑ Back to top`#top]`_`f`a